#pragma once
#include "Platforms.h"
#include <vector>
#include "Matrix.h"

class Shader 
{
	char id[MAX_10];

public:
	GLuint program, vertexShader, fragmentShader;
	std::vector<GLenum> states;

	GLint a_position;
	GLint a_uv;
	GLint u_matrixWVP;
	GLint u_matrixW;
	GLint u_camPosition;
	GLint u_sample;
	GLint u_color;
	GLint a_normal;

	GLint a_CubeVertexPos;
	GLint u_CubeMVPMatrix;
	GLint u_samplerCubeMap;

	//Method
	Shader();
	GLuint LoadProgram ( GLuint vertexShader, GLuint fragmentShader ) ;
	GLuint LoadShader ( GLenum type, const char * filename ) ;
	int Init(const char* vertexShaderPath, const char* fragmentShaderPath, const char* id);
	virtual ~Shader();
	void AddState(GLenum state);
	void EnableState();
	void DisableState();
	const char* GetID();
};
